package com.scott.itcast.thread.pool.p04.timer;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;


/**
 * 用线程池启动定时器 
 * 今天凌晨3点开始炸  然后以后每天凌晨3点都会炸
 * 
 */
public class ThreadPoolTest3 {
	
	private static SimpleDateFormat sdf =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

	public static void main(String[] args) {
		
		Date date = null;
		//String str="2016-05-09 03:00:00";
		String str="2016-05-08 12:07:00";
		
		try {
			date = sdf.parse(str);
		} catch (ParseException e) {
			e.printStackTrace();
		}
		
		
		
		//只有1个任务 但是有3个线程 。所以是其中的1个线程去执行这个任务。
		//6秒之后炸  以后每隔2秒炸   这里的单位都是毫秒  1秒=1000毫秒
		Executors.newScheduledThreadPool(3).scheduleAtFixedRate(new Runnable(){
			public void run() {
				
				System.out.println("线程["+Thread.currentThread().getName()+"]执行调度任务... 时间是:["+ sdf.format( new Date())+"]");
			}
			
		//}, date.getTime()- System.currentTimeMillis(), 24*60*60*1000, TimeUnit.MILLISECONDS);
		  }, date.getTime()- System.currentTimeMillis(), 10*1000, TimeUnit.MILLISECONDS);
		
	}
}


/**
 某次的执行结果如下： 可以推断出 线程的下标从1开始
 
线程[pool-1-thread-1]执行调度任务...
线程[pool-1-thread-1]执行调度任务...
线程[pool-1-thread-2]执行调度任务...
线程[pool-1-thread-2]执行调度任务...
线程[pool-1-thread-3]执行调度任务...
线程[pool-1-thread-1]执行调度任务...
线程[pool-1-thread-1]执行调度任务...
线程[pool-1-thread-3]执行调度任务...
线程[pool-1-thread-3]执行调度任务...
线程[pool-1-thread-1]执行调度任务...
线程[pool-1-thread-1]执行调度任务...
线程[pool-1-thread-3]执行调度任务...
线程[pool-1-thread-3]执行调度任务...
线程[pool-1-thread-1]执行调度任务...
线程[pool-1-thread-1]执行调度任务...
线程[pool-1-thread-3]执行调度任务...
线程[pool-1-thread-3]执行调度任务...
线程[pool-1-thread-1]执行调度任务...
*/
